/**
 * 
 */

;(function(jQuery,undefined){
	$.fn.pagination=function(options){
        if (methods[options]) {
            // 如果存在该方法就调用该方法
            return methods[options].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof options === 'object' || !options) {
            // 如果传进来的参数是"{...}", 就认为是初始化操作.
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + options + ' does not exist on jQuery.mmClock');
        }	
	},
	$.fn.pagination.defaults={
			url:'',
			layer:null, // 当前等级
			page:1,// 当前页
			rows:2,// 每页数据
			total:0,
			name:null,//搜索名称
			sort:null,//排序
			rank:null,//级别
			pageationIndex:8,// 分页按钮数字
			maxPage:0,// 最大页数
			nowIndex:0,// 当前光标所指的下标
			datas:[],// 数据
			param:{}
	}
	
	var _private={
			setActive:function(activeIndex,options){
				options.nowIndex=activeIndex;
				$('.pagination-footer .list-group .list-group-item')
				.siblings()
				.removeClass('active')
				.eq(activeIndex).addClass('active');
			},
			initUrl:function(options,page){
				
				page = page==null?options.page:page;
				var url = null;
				if(options.layer!=null){
					 url=options.url+options.layer+'/'+page+"/"+options.rows;
				}else{
					url=options.url+page+"/"+options.rows;
				}
				for(var i in options.param){
					if(options.param[i]!=null){
						url += '/'+options.param[i]
					}
				}
			
				return url;
			},
			loadData:function(options){
				var url = _private.initUrl(options,null);
//				console.log(options+" "+url);
				$.ajax({type : "post",url:url,async:true})
				.done(function(data){
					options.datas=data.rows;
					options.total=data.total;
					options.render(options);
					return options;
				});
				
			},
			forwardHandler:function(event){
				var options=event.data.options;
				var activeNum=parseInt($('.pagination-footer .list-group .active a:first').html());
				var alist=$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last');
				var lastNumber=parseInt($('.pagination-footer .list-group-item a:last').not('.item-points').not('.item-last'));
				// 如果当前光标在第一个位置
				console.log(activeNum>1&&parseInt($(alist[0]).html())>=2)
				if(activeNum>1&&parseInt($(alist[0]).html())>=2){
					activeNum=activeNum-1;
					$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last a').each(function(i){
						 $(this).html(parseInt($(this).html())-1);	
					});
				}else if(activeNum>=2&&parseInt($(alist[0]).html())==1){
					activeNum=activeNum-1;
				}	

				$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last').each(function(i){
					if(i<=7){
						var url = null;
						if(parseInt($(this).html())==activeNum){
							options.nowIndex=i;
							url = _private.initUrl(options,activeNum);
							$.post(url,function(data){})
							.done(function(data){
								options.datas=data.rows;
								options.total=data.total;
								options.render(options);
							}).done(function(){
								event.data.setActive(options.nowIndex,options);
								event.data.setBtn(options);
							})

						}	
					}
				});	
				
				if($('.last-num').children('a').html()==options.maxPage){
					$('.item-last').children('a').html(options.maxPage);
					$('.item-points,.item-last').hide();
		        }
		        else{
		        	$('.item-last').children('a').html(options.maxPage);
		        	$('.item-points,.item-last').show();
		        }
				
			},
			backOffHandler:function(event){
				var options=event.data.options;
				var activeNum=parseInt($('.pagination-footer .list-group .active a:first').html());
				var lastNum=parseInt($('.last-num a:first').html());
				// 如果激活的号小于最大值，并且最后一位不是最大值
				if(activeNum<options.maxPage&&lastNum<options.maxPage){
					$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last a').each(function(i){
						 $(this).html(parseInt($(this).html())+1);	
					});
					// 前进一位置
					activeNum=activeNum+1;
				}else if(activeNum<options.maxPage){
					activeNum=activeNum+1;
				}
				// console.log("activeNum="+activeNum);
				$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last').each(function(i){
					if(i<=7){
						if(parseInt($(this).html())==activeNum){
							options.nowIndex=i;
							var url = _private.initUrl(options,activeNum);
							$.post(url,function(data){})
							.done(function(data){
								options.datas=data.rows;
								options.total=data.total;
								options.render(options);
							}).done(function(){
								event.data.setActive(options.nowIndex,options);
								event.data.setBtn(options);
							})

						}	
					}
				});	
				
				if($('.last-num').children('a').html()==options.maxPage){
					$('.item-last').children('a').html(options.maxPage);
					$('.item-points,.item-last').hide();
		        }
		        else{
		        	$('.item-last').children('a').html(options.maxPage);
		        	$('.item-points,.item-last').show();
		        }
			},
			skipHandler:function(event){
				var options=event.data.options;
				var skipNum=$('.pagination-footer .skip input').val();
				var reg = new RegExp("^[0-9]*$");
				if(!reg.test(skipNum)){
					$('.pagination-footer .skip input').val('');
					return ;
				}else if(skipNum>options.maxPage){
					$('.pagination-footer .skip input').val(options.maxPage);
				}else if(skipNum<=0){
					$('.pagination-footer .skip input').val(1);
				}
				skipNum=$('.pagination-footer .skip input').val();
				
				if(skipNum<=4){// 位于头
					$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last a').each(function(i){
						 $(this).html(i+1);	
					});
				}else if(skipNum>=5&&skipNum<options.maxPage-3){// 位于中间
					var startNum=skipNum-3;
					$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last a').each(function(i){
						 $(this).html(startNum+i);	
					});
				}else{
					var startNum=options.maxPage-7;// 位于结束
					$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last a').each(function(i){
						 $(this).html(startNum+i);	
					})
				}

				$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last').each(function(i){
					if(i<=7){
						if(parseInt($(this).html())==skipNum){
							options.nowIndex=i;
							var url = _private.initUrl(options,skipNum);
							$.post(url,function(data){})
							.done(function(data){
								options.datas=data.rows;
								options.total=data.total;
								options.render(options);
							}).done(function(){
								event.data.setActive(options.nowIndex,options);
								event.data.setBtn(options);
							});

						}	
					}
				});	
				if($('.last-num').children('a').html()==options.maxPage){
					$('.item-last').children('a').html(options.maxPage);
					$('.item-points,.item-last').hide();
		        }
		        else{
		        	$('.item-last').children('a').html(options.maxPage);
		        	$('.item-points,.item-last').show();
		        }
			},			
			pageation:function(options){
				var self=this;
				$('.pagination-footer .list-group-item').not('.item-points').not('.item-last').each(function(i){
					// console.log("当前下标="+i+"值是:"+currnetText);
					// 绑定下标绑定事件
					$(this).on('click',function(e){
						var currnetText=$(this).children('a').html();
						// console.log("当前值是:"+currnetText);
						var currentIndex=i;
						e.preventDefault();
						var tempCurrent=parseInt(currnetText);
						// 如果最大页面等于当前页码下标则返回
						if(options.maxPage<=options.pageationIndex){
							
						}else if($('.last-num').children('a').html()==options.maxPage){
							// console.log('最后一位是尽头了');
							if(tempCurrent!=options.maxPage&&tempCurrent+3<options.maxPage){
								var tempCurrent=parseInt(currnetText);
								var centerNum= $($('.pagination-footer .list-group-item a').not('.item-points').not('.item-last')[3]).html();
								$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last').each(function(i){
									 $(this).html(parseInt($(this).html())-(centerNum-tempCurrent));
								});							
							}
						}
						else if(options.maxPage-currnetText<=3){
							console.log('else if');
							$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last').each(function(i){
								 $(this).html((options.maxPage-options.pageationIndex+i+1));
							});
						}else{				
							/*console.log("else");*/
							if(tempCurrent>=4){
								// 获取中间下标的值
								var centerNum= $($('.pagination-footer .list-group-item a').not('.item-points').not('.item-last')[3]).html();
								var tempCount= currnetText-centerNum;
								$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last a').each(function(i){
									 $(this).html(parseInt($(this).html())+tempCount);	
								});		
							}else{
								// 获取第一个坐标
								var firstNumber=parseInt($('.pagination-footer .list-group-item a:first').html());
								if(firstNumber!=1){
									$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last a').each(function(i){
										 $(this).html(i+1);	
									});
								}
							}


						}
						
						$('.pagination-footer .list-group-item a').not('.item-points').not('.item-last').each(function(i){
							if(i<=7){
								if(parseInt($(this).html())==tempCurrent){
									options.nowIndex=i;
									var url = _private.initUrl(options,tempCurrent);
									$.post(url,function(data){})
									.done(function(data){
										options.datas=data.rows;
										options.total=data.total;
										options.render(options);
									}).done(function(){
										self.setActive(options.nowIndex,options);
										self.setBtn(options);
									})

								}	
							}
						});	
						
						if($('.last-num').children('a').html()==options.maxPage){
							$('.item-last').children('a').html(options.maxPage);
							$('.item-points,.item-last').hide();
				        }
				        else{
				        	$('.item-last').children('a').html(options.maxPage);
				        	$('.item-points,.item-last').show();
				        }
					});
				});
		        // 点击最后一页跳转
		        $('.pagination-footer .item-last').on('click',function (e) {
		            e.preventDefault();
		            // 设置最后一页时的分页按钮
		            $('.pagination-footer .list-group-item a').each(function(i){
		            	// 最大页数-分页按钮数字+i+1
		            	$(this).html(options.maxPage-options.pageationIndex+i+1);
		            });
		            
		           self.setActive(options.pageationIndex-1,options);
		           var url=null;
		           if($('.last-num').children('a').html()==options.maxPage){
						$('.item-last').children('a').html(options.maxPage);
						$('.item-points,.item-last').hide();
			       }
			       else{
			        	$('.item-last').children('a').html(options.maxPage);
			        	$('.item-points,.item-last').show();
			       }
		           if(options.layer!=null){
		        	   url =  options.url+options.layer+'/'+options.maxPage+"/"+options.rows;
					}
		           else if(options.name!=null||options.sort!=null||options.rank!=null){
						url=options.url+options.maxPage+"/"+options.rows+"/"+options.sort+"/"+options.name+"/"+options.rank;
					}
					else{
						url=options.url+options.maxPage+"/"+options.rows;
					}
		           
					$.post(url,function(data){}).done(function(data){
						options.datas=data.rows;
						options.render(options);
						self.setBtn(options);
						// 点击分页发送
					});	
		          
		        });				
			},	
			// 控制上下页的button的显示
	        setBtn:function(options){
	        	// console.log(options.nowIndex);
	        	var activeNum=parseInt($('.pagination-footer .list-group .active a:first').html());
	            if(activeNum>1){
	                $('.prev').show();
	            }
	            else{
	                $('.prev').hide();
	            }
	          
	            if(activeNum<options.maxPage){
	                $('.next').show();
	            }
	            else{
	                $('.next').hide();
	            }
	        },
			generDom:function(){
				var strDom='<div class="pagination-footer clearfix">'
					
						+'<span class="item-btn prev hide"><button class="btn btn-prev" type="button">  < </button></span>' 
					  	+'<ul class="list-group clearfix"></ul>'
					  	+'<span class="item-btn next hide"><button class="btn btn-next" type="button">  > </button></span>'
					  		+'<div class="skip hide">'
					  		+'<span>跳转:</span><input type="text" class="page"><button class="btn-skip">GO</button>'
					  		+'</div>'
					  		
                	  +'</div>';
					  return strDom;
			},
	     
	}
	var methods={
			renderEvent:function(render){
				render.apply(this,{});
			},
			
			init:function(option){
				//console.log(option);
				var self=this;
				// 绘出控件原型
				this.empty();
				// console.log(_private.generDom());
				// 绑定参数
				var options = $.extend({},$.fn.pagination.defaults,option);
				_private.loadData(options);
				this.append(_private.generDom());
				
				options.maxPage =Math.ceil(options.total/options.rows);  // 向上取整
				var elemTarget = $('.pagination-footer .list-group');// 获取ul容器
				// console.log(elemTarget);
				// 生成ul下的li 页码按钮
				var optionsCount=1;
				if(options.maxPage>=options.pageationIndex){
					// 如果最大页码大于默认页码
					optionsCount=options.pageationIndex;
				}else{
					optionsCount=options.maxPage;
				}
				for(var i=0;i<optionsCount;i++){// pageationIndex默认为8
					var pageationNumBtn="<li class='list-group-item'><a href='javascript:;'>"+(i+1)+"</a></li>";
					elemTarget.append(pageationNumBtn);
				}
				// 为最后一个数字添加 一个类标记 last-num
				$('.pagination-footer .list-group li:last-child').addClass('last-num');
				
				if(options.maxPage>8){
					var pageationNumEndBtn = '<li class="list-group-item item-points"><span class="points">...</span></li><li class="list-group-item item-last"><a href="#">'+options.maxPage+'</a></li>';
					elemTarget.append(pageationNumEndBtn);
					// 最大页面大于8显示跳转
					$('.pagination-footer .skip').removeClass('hide')
				}
				
				// 默认激活第一个页

				_private.setActive(options.nowIndex,options);
				// console.log(option);

				_private.pageation(options);

			    // 绑定前进按钮事件
			    var thisObj={'options':options,'setActive':_private.setActive,'setBtn':_private.setBtn};
			    $('.btn-prev').on('click',thisObj,_private.forwardHandler);
			    // 绑定后退按钮事件
			    $('.next').on('click',thisObj,_private.backOffHandler);
			    
			    $('.btn-skip').on('click',thisObj,_private.skipHandler);
			    _private.setBtn(options);
			}	
	}
})(jQuery,undefined)

